from estadoProyecto import EstadoProyecto, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()

class EstadoProyectoManager(object):
    """Clase encargada del manejo de estados de proyecto"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<EstadoProyecto Manager>'
    
    def guardarEstadoProyecto(self, estadoProyecto):
        """
        Metodo encargado de almacenar un estado de proyecto en la base de datos
        @param estadoProyecto: Objeto estado proyecto que se desea guardar.
        """
        session.add(estadoProyecto)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El estado ya existe", "error")
        else:
            return flash("Estado de proyecto registrado exitosamente")
#        session.close()
        
    def eliminarEstadoProyecto(self, idestadoproyecto):
        """
        Metodo encargado de eliminar un estado de proyecto de la base de datos
         @param idestadoproyecto: id del estado proyecto que se desea eliminar.
        """
#        session = db_session()
        estadoProyecto = session.query(EstadoProyecto).filter(EstadoProyecto.idestadoproyecto == idestadoproyecto).first()
        session.delete(estadoProyecto)
        session.commit()
        
    def getEstadoProyecto(self, idestadoproyecto):
        """
        Metodo encargado de retornar estado de proyecto dado su idestado
        @param idestadoproyecto: id del estado proyecto que se desea obtener.
        """
        estadoProyecto = session.query(EstadoProyecto).filter(EstadoProyecto.idestadoproyecto == idestadoproyecto).first()
        return estadoProyecto
    
    def getEstadoProyectos(self):
        """Metodo encargado de retornar todos los estados de proyecto"""
        estadoProyectos = session.query(EstadoProyecto)
        return estadoProyectos
    
    def getEstadoProyectoFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de proyecto dado su nombre
        @param nombre: nombre del estado proyecto que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        estadoProyecto = session.query(EstadoProyecto).filter(EstadoProyecto.nombre.like(nombre))
        return estadoProyecto
    
    def getEstadoProyectoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de proyecto dado su nombre
        @param nombre: nombre del estado proyecto que se desea obtener.
        """
        estadoProyecto = session.query(EstadoProyecto).filter(EstadoProyecto.nombre == nombre).first()
        return estadoProyecto
    
